// 解构赋值 ----左边一个赋值 右边一个赋值  一一对应赋值
// 1.数组解构赋值
{
  let a,b,rest;
  [a,b]=[1,2];
  console.log(a);
  console.log(b);
}
{
  let a,b,rest;
  [a,b,...rest]=[1,2,3,4,5,6];
  console.log(a,b,rest);//1,2,[3,4,5,6]
}
// 2.对象解构赋值
{
  let a,b;
  ({a,b}={a:1,b:2})
  console.log(a,b);//1,2
}

/*
*数组解构赋值的基本使用方法，默认值和使用场景
*/
{
  let a,b,c,rest;
  [a,b,c]=[1,2];
  console.log(a,b,c);//1,2,undefined
//如果在解构赋值中没有找到对应的对象就是undefined；就是默认值是undefined；
}
//使用的场景
// 1.变量之间的交换
{
  let a=1;let b=2;
  [a,b]=[b,a]
  console.log(a,b);//2,1
}
//2.在es5中需要定义一个变量来接受返回值，然后选择其索引用来获取值
{
  function f(){
    return [1,2]
  }
  let a,b;
  [a,b]=f();
  console.log(a,b);//1,2
}
//3.返回多个值的时候  可以选择性的获取一些值
{
  function f(){
    return [1,2,3,4,5]
  }
  let a,b,c;
  [a,,,b]=f();
  console.log(a,b,c);//1,4,undefined
}
//4.适用于我不知道这个函数返回的数组的长度是多少，只关心第一个，后面的变成一个数组返回即可
{
  function f(){
    return [1,2,3,4,5]
  }
  let a,b,c;
  [a,...b]=f();
  console.log(a,b);//1,[2,3,4,5]
}

/*
*对象解构赋值的基本使用方法，默认值和使用场景
*/
//对象赋值的几种方式
{
  let o={p:42,q:true};
  let{p,q}=o;
  console.log(p,q);//42,true
}

{
  let {a=10,b=5}={a:3};
//对象覆盖，重新赋值
  console.log(a,b);//3,5
}
//对象赋值的使用场景
// 函数的参数的解构赋值
{
  let metaData={
    title:'dada',
    test:[{
      title:'asasa',
      desc:'55522'
    }]
  }
  let {title:n,test:[{title:e}]}=metaData;
  console.log(n,e);//dada,asasa
}
